<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body></body>
  <script>
    /* 
        继承
            - 通过继承额可以在不修改一个类的情况下对其进行扩展
            - OCP开闭原则
                - 程序应该对修改关闭，对扩展开放
    */
    class Animal {
      constructor(name) {
        this.name = name;
      }
      say() {
        console.log("动物再叫");
      }
    }
    class Dog extends Animal {
      //在子类中可以通过重名的方法来重写父类的方法
      say() {
        super.say(); // 在方法中可以使用super来引用父类的方法
        console.log(this.name + "再叫123");
      }
    }
    class Cat extends Animal {
      //重写构造函数
      constructor(name, age) {
        //重写构造函数时，构造函数的第一行代码必须为super（）
        super(name);
        this.age = age;
      }
    }
    let d = new Dog("小狗");
    let c = new Cat("小猫", "2");
    c.say();
    d.say();
    console.log(d, c);
  </script>
</html>
